const UserService = require("../service/user.service");
const {
  NAME_OR_PASSWORD_IS_REQUIRED,
  NAME_IS_ALREADY_EXISTS,
} = require("../config/error");
const md5Password = require("../utils/md5-password");

/**
 * 判断用户名以及是否为空的中间件函数
 */
const verifyUser = async (ctx, next) => {
  // 验证客户端传过来的数据是否能保存到数据库中
  // 1、用户名或密码不能为空
  const { name, password } = ctx.request.body;
  if (!name || !password) {
    return ctx.app.emit("error", NAME_OR_PASSWORD_IS_REQUIRED, ctx);
  }
  // 2、判断用户是否重复
  const findRes = await UserService.findUserByName(name);
  if (findRes.length) {
    return ctx.app.emit("error", NAME_IS_ALREADY_EXISTS, ctx);
  }
  // 3、进入下一个中间件
  await next();
};

/**
 * 给密码加密的中间件
 */
const handlePassword = async (ctx, next) => {
  // 1、取出密码
  const { password } = ctx.request.body;

  // 2、加密密码
  ctx.request.body.password = md5Password(password);

  // 3、执行下一个中间件
  await next();
};

module.exports = { verifyUser, handlePassword };
